#pragma once
#include "common.h"
#include "IGameEngine.h"

struct IWindow;
struct IEngineRenderDevice;
struct IEngineRenderContext;
struct IEngineWindow;

typedef shared_ptr<IEngineWindow> IEngineWindowPtr;
typedef shared_ptr<IEngineRenderDevice> IEngineRenderDevicePtr;
typedef shared_ptr<IEngineRenderContext> IEngineRenderContextPtr;

class GameEngine : public IGameEngine
{
public:
	GameEngine(const EngineSetup& setup);
	virtual ~GameEngine();
    virtual void Release();

	virtual void		Run() const;
	virtual IWindow*	GetWindow() const;

private:
	EngineSetup		        m_setup;
	IEngineWindowPtr        m_window;
	IEngineRenderDevicePtr  m_renderDevice;
    IEngineRenderContextPtr m_renderContext;
};